home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Disc to the Future 2
/
Disc to the Future Part II Programmer's Reference (Wayzata Technology)(6013)(1992).bin
/
MAC
/
MPW_TOOL
/
TOOLS
/
TOOLS_WI
/
ICON_8
/
BENCH_FO
/
OPTIONS.ICN
< prev
next >
Wrap
Text File
|
1990-04-06
|
3KB
|
75 lines
############################################################################
#
# Name: options.icn
#
# Title: Get command-line options
#
# Authors: Robert J. Alexander, June 10, 1988
# Gregg M. Townsend, November 9, 1989
#
############################################################################
#
# options(arg,optstring) -- Get command line options.
#
# This procedure analyzes the -options on the command line
# invoking an Icon program. The inputs are:
#
# arg the argument list as passed to the main procedure.
#
# optstring a string of allowable option letters. If a
# letter is followed by ":" the corresponding
# option is assumed to be followed by a string of
# data, optionally separated from the letter by
# space. If instead of ":" the letter is followed
# by a "+", the parameter will converted to an
# integer; if a ".", converted to a real. If opt-
# string is omitted any letter is assumed to be
# valid and require no data.
#
# It returns a table containing the options that were specified.
# The keys are the specified option letters. The assigned values are
# the data words following the options, if any, or 1 if the option
# has no data. The table's default value is &null.
#
# If an error is detected, stop() is called with an appropriate
# error message.
#
# Options may be freely interspersed with non-option arguments.
# An argument of "-" is treated as a non-option. The special argument
# "--" terminates option processing. Non-option arguments are returned
# in the original argument list for interpretation by the caller.
#
############################################################################
procedure options(arg,optstring)
local x,i,c,otab,flist,o,p
/optstring := string(&letters)
otab := table()
flist := []
while x := get(arg) do
x ? {
if ="-" & not pos(0) then {
if ="-" & pos(0) then break
while c := move(1) do
if i := find(c,optstring) + 1 then
otab[c] :=
if any(':+.',o := optstring[i]) then {
p := "" ~== tab(0) | get(arg) |
stop("No parameter following -",c)
case o of {
":": p
"+": integer(p) |
stop("-",c," needs numeric parameter")
".": real(p) |
stop("-",c," needs numeric parameter")
}
}
else 1
else stop("Unrecognized option: -",c)
}
else put(flist,x)
}
while push(arg,pull(flist))
return otab
end